Object-oriented programming languages, such as Java, C++, etc., require the creation and manipulation of objects in order to perform functions dictated by a software program. An object is a unique, concrete instance of an abstract data type (i.e., a conceptual structure including both data and the methods to access the data) whose identity is separate from that of other objects. Objects are used to simulate actions performed by a program written in an object-oriented programming language. Different functions can be simulated and tested by monitoring object behavior or reading the output of objects in a program.
In some cases, specific information from objects may be needed that requires information about the creation and destruction of an object. For example, when analyzing object immutability, knowing when a particular constructor executed to create an object is important. Obtaining object creation and destruction information allows updates to the object's fields to be properly attributed to the constructor and not to post-construction object manipulation.
Typically, objects are tracked by manually editing the code (i.e., source code, executable code, reconstructed machine code, etc.) associated with each object constructor. However, constructors are capable of calling other constructors recursively. Therefore, statically analyzing programs in this manner to detect which constructor invocations should be included and which constructors should be excluded from tracking may be difficult. Another method used to track objects in programming languages involves modifying the run-time platform executing the program.